package io.lkt.modules.sys.controller;

import io.lkt.common.utils.AliyunOssClientUtil;
import io.lkt.common.utils.DateUtil;
import io.lkt.common.utils.MultimediaCompressionUtil;
import io.lkt.common.utils.R;
import org.springframework.web.bind.annotation.RequestMapping;
import org.springframework.web.bind.annotation.RequestParam;
import org.springframework.web.bind.annotation.RestController;
import org.springframework.web.multipart.MultipartFile;

import java.io.File;
import java.io.IOException;
import java.util.UUID;

@RestController
@RequestMapping("/upload")
public class UploadFileController {
    private static final String OSS_SERVER_URL = "http://zktfile.wxslzf.com/";

    /**
     * 上传并压缩视频文件到阿里云OSS服务器
     * @param multipartFile
     * @return
     */
    @RequestMapping("/video")
    public R uploadVideo(@RequestParam("file") MultipartFile multipartFile) {
        String articleVideoUrl = "";// 文章视频路径
        File sourceFile = null;// 前端传过来的文件临时存放对象
        File targetFile = null;// 压缩后的文件

        String videoFormat = ".mp4";
        String videoDir = "video";
        long fileSize = 0L;

        try {
            // 1、创建临时文件，并把上传的文件保存到该文件
            sourceFile = File.createTempFile(UUID.randomUUID().toString(), videoFormat);
            targetFile = File.createTempFile(UUID.randomUUID().toString(), videoFormat);
            System.out.println("[sourceFilePath] = " + sourceFile.getPath());
            System.out.println("[targetFilePath] = " + targetFile.getPath());
            multipartFile.transferTo(sourceFile);

            // 2、对文件压缩，生成压缩文件
            File compressionFile = MultimediaCompressionUtil.compressionVideo(sourceFile, targetFile);
            fileSize = compressionFile.length();

            // 3、上传压缩文件到阿里云oss,并返回地址
            String fileName = UUID.randomUUID().toString() + videoFormat;// 文件名称

            // 保存路径
            String formatDate = DateUtil.getFormatDate("yyyyMMdd", DateUtil.getCurDate());// 当前日期
            String dirName = videoDir + "/" + formatDate + "/" + fileName;

            // 视频路径
            articleVideoUrl = OSS_SERVER_URL + dirName;
            AliyunOssClientUtil.uploadFileByLocalFile(compressionFile, dirName);

            System.out.println("\n-----视频保存OSS路径-----\n" + articleVideoUrl);
        } catch (IOException e) {
//            e.printStackTrace();
            return R.error("上传文件失败");
        } finally {
            if (sourceFile != null && sourceFile.length() > 0) {
                sourceFile.deleteOnExit();
                sourceFile.delete();
            }

            if (targetFile != null && targetFile.length() > 0) {
                targetFile.deleteOnExit();
                targetFile.delete();
            }
        }

        return R.ok().put("articleVideoUrl", articleVideoUrl).put("videoFormat", videoFormat).put("fileSize", fileSize);
    }

    /**
     * 上传并压缩音频文件到阿里云OSS服务器
     * @param multipartFile
     * @return
     */
    @RequestMapping("/audio")
    public R uploadAudio(@RequestParam("file") MultipartFile multipartFile) {
        String articleAudioUrl = "";// 文章音频路径
        File sourceFile = null;// 前端传过来的文件临时存放对象
        File targetFile = null;// 压缩后的文件

        String auidoFormat = ".mp3";
        String auidoDir = "music";
        long fileSize = 0L;

        try {
            // 1、创建临时文件，并把上传的文件保存到该文件
            sourceFile = File.createTempFile(UUID.randomUUID().toString(), auidoFormat);
            targetFile = File.createTempFile(UUID.randomUUID().toString(), auidoFormat);
            System.out.println("[sourceFilePath] = " + sourceFile.getPath());
            System.out.println("[targetFilePath] = " + targetFile.getPath());
            multipartFile.transferTo(sourceFile);

            // 2、对文件压缩，生成压缩文件
            File compressionFile = MultimediaCompressionUtil.compressionAudio(sourceFile, targetFile);
            fileSize = compressionFile.length();

            // 3、上传压缩文件到阿里云oss,并返回地址
            String fileName = UUID.randomUUID().toString() + auidoFormat;// 文件名称

            // 保存路径
            String formatDate = DateUtil.getFormatDate("yyyyMMdd", DateUtil.getCurDate());// 当前日期
            String dirName = auidoDir + "/" + formatDate + "/" + fileName;

            // 视频路径
            articleAudioUrl = OSS_SERVER_URL + dirName;
            AliyunOssClientUtil.uploadFileByLocalFile(compressionFile, dirName);

            System.out.println("\n-----视频保存OSS路径-----\n" + articleAudioUrl);
        } catch (IOException e) {
//            e.printStackTrace();
            return R.error("上传文件失败");
        } finally {
            if (sourceFile != null && sourceFile.length() > 0) {
                sourceFile.deleteOnExit();
                sourceFile.delete();
            }

            if (targetFile != null && targetFile.length() > 0) {
                targetFile.deleteOnExit();
                targetFile.delete();
            }
        }

        return R.ok().put("articleAudioUrl", articleAudioUrl);
    }
}
